package pe.edu.unmsm.ocaa.workspace.integracion.dao.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.ibatis.sqlmap.client.SqlMapClient;

import pe.edu.unmsm.ocaa.workspace.integracion.dao.UsuarioDAO;
import pe.edu.unmsm.ocaa.workspace.negocio.modelo.dto.BDUsuarioGrupoDTO;
import pe.edu.unmsm.ocaa.workspace.negocio.modelo.dto.UsuarioDTO;
import pe.edu.unmsm.ocaa.workspace.negocio.modelo.dto.VWUsuarioDTO;
import pe.edu.unmsm.ocaa.workspace.negocio.modelo.dto.VentanaPrincipalDTO;

@Repository
public class UsuarioDAOImpl extends SqlMapClientDaoSupport implements UsuarioDAO {

	
	@Autowired
	public UsuarioDAOImpl(SqlMapClient sql) {
		super.setSqlMapClient(sql);
	}

	@Override
	public boolean validarNikPsw(String nickname, String password)
			throws DataAccessException {
		Map map=new HashMap();
		map.put("nik", nickname);
		map.put("psw", password);
		Integer count=(Integer)getSqlMapClientTemplate().queryForObject("Usuario.countUsuario", map);
		if (count>0) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public Integer insertUsuario(UsuarioDTO usuario) throws DataAccessException {
		getSqlMapClientTemplate().insert("Usuario.insertUsuario", usuario);
		return (Integer)getSqlMapClientTemplate().queryForObject("Usuario.selectMaxUsuario");
	}

	@Override
	public void updateUsuario(UsuarioDTO usuario) throws DataAccessException {
		getSqlMapClientTemplate().update("Usuario.updateUsuario", usuario);
	}

	@Override
	public List<BDUsuarioGrupoDTO> listUsuarios() throws DataAccessException {
		return (List<BDUsuarioGrupoDTO>)getSqlMapClientTemplate().queryForList("Usuario.selectUsuarios");
	}

	@Override
	public UsuarioDTO selectUsuario(Integer idUsuario)
			throws DataAccessException {
		return (UsuarioDTO)getSqlMapClientTemplate().queryForObject("Usuario.selectUsuario", idUsuario);
	}

	@Override
	public void deleteUsuario(Integer idUsuario) throws DataAccessException {
		getSqlMapClientTemplate().delete("Usuario.deleteUsuario", idUsuario);
	}

	@Override
	public List<UsuarioDTO> listNicksUsuarioxNick(String nickUsuario)
			throws DataAccessException {
		return (List<UsuarioDTO>)getSqlMapClientTemplate().queryForList("Usuario.selectNicksxNick", nickUsuario+"%");
	}

	@Override
	public List<VWUsuarioDTO> listUsuariosxArchivo(Integer idArchivo)
			throws DataAccessException {
		return (List<VWUsuarioDTO>)getSqlMapClientTemplate().queryForList("Usuario.selectUsuariosxArchivo", idArchivo);
	}

	@Override
	public UsuarioDTO selectUsuarioxNik(String nickUsuario)
			throws DataAccessException {
		return (UsuarioDTO)getSqlMapClientTemplate().queryForObject("Usuario.selectUsuarioxNick", nickUsuario);
	}

	@Override
	public void insertGrupoUsuario(String nomGrupo, Integer idUsuario)
			throws DataAccessException {
		Map map=new HashMap();
		map.put("nomGrupo", nomGrupo);
		map.put("idUsuario", idUsuario);
		getSqlMapClientTemplate().insert("Usuario.insertGrupoUsuario", map);
	}

	@Override
	public void deleteGrupoUsuario(Integer idUsuario)
			throws DataAccessException {
		getSqlMapClientTemplate().delete("Usuario.deleteGrupoUsuario", idUsuario);
	}

	@Override
	public List<UsuarioDTO> listUsuariosxGrupo(Integer idGrupo)
			throws DataAccessException {
		return (List<UsuarioDTO>)getSqlMapClientTemplate().queryForList("Usuario.selectUsuarioxGrupo", idGrupo);
	}

	@Override
	public VentanaPrincipalDTO selectVentanaPrincipalActual()
			throws DataAccessException {
		return (VentanaPrincipalDTO)getSqlMapClientTemplate().queryForObject("Usuario.selectVentanaPrincipalActual");
	}

	@Override
	public void updateVentanaPrincipal(VentanaPrincipalDTO ventanaPrincipal)
			throws DataAccessException {
		getSqlMapClientTemplate().update("Usuario.updateVentanaPrincipal", ventanaPrincipal);
	}

}
